package com.webermagem.controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.hibernate.Session;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

import com.webermagem.DAO.TipoSintomaDAO;
import com.webermagem.model.TipoSintoma;
import com.webermagem.model.TipoSintomaDataModel;
import com.webermagem.util.SessionManager;

@ManagedBean
@SessionScoped
public class TipoSintomaController implements Serializable {

	private static final long serialVersionUID = 1L;

	private TipoSintoma novoTipoSintoma = new TipoSintoma();
	private TipoSintoma tipoSintoma;
	private TipoSintoma tipoSintomaPesq = new TipoSintoma();
	private List<TipoSintoma> listaTipoSintomas;
	private TipoSintomaDataModel tipoSintomaModel;
	private TipoSintomaDAO tipoSintomaDao = new TipoSintomaDAO();

	// ADICIONA
	public void adicionarTipoSintoma(ActionEvent actionEvent){
		
		RequestContext context = RequestContext.getCurrentInstance();
		context.addCallbackParam("user", novoTipoSintoma);
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		tipoSintomaDao.save((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), novoTipoSintoma);
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Sucesso", "TipoSintoma adicionado com Sucesso!"));
		novoTipoSintoma = new TipoSintoma();
		
	}
	
    public void onRowSelect(SelectEvent event) {
    	tipoSintoma = (TipoSintoma)(tipoSintomaModel.getRowData());
    }
    
	// ALTERA
	public void alterarTipoSintoma(ActionEvent actionEvent){
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		tipoSintomaDao.update((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), tipoSintoma);
		FacesContext context = FacesContext.getCurrentInstance();  
		context.addMessage(null, new FacesMessage("Sucesso", "TipoSintoma atualizado com Sucesso!"));
	}

	// EXCLUIR
	public void excluirTipoSintoma(ActionEvent actionEvent){
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		tipoSintomaDao.remove((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), tipoSintoma);
		FacesContext context = FacesContext.getCurrentInstance();  
		context.addMessage(null, new FacesMessage("Sucesso", "TipoSintoma excluido com Sucesso!"));
	}
	
	// CONSULTAR
	public void pesquisarTipoSintoma(ActionEvent actionEvent){
		
		RequestContext context = RequestContext.getCurrentInstance();
		context.addCallbackParam("user", tipoSintomaPesq);
		
	}
	
	// GETS E SETTERS

	public TipoSintomaDAO getTipoSintomaDao() {
		return tipoSintomaDao;
	}

	public void setTipoSintomaDao(TipoSintomaDAO tipoSintomaDao) {
		this.tipoSintomaDao = tipoSintomaDao;
	}

	public TipoSintoma getTipoSintoma() {
		return tipoSintoma;
	}

	public void setTipoSintoma(TipoSintoma tipoSintoma) {
		this.tipoSintoma = tipoSintoma;
	}

	public TipoSintomaDataModel getTipoSintomaModel() {
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		if(tipoSintomaPesq == null || tipoSintomaPesq.getDescricao() == null) {
			
			listaTipoSintomas = (List<TipoSintoma>) tipoSintomaDao.listOrdenado((Session)SessionManager.getSessionAttribute(facesContext, "transacao"));
			
		} else {
			
			listaTipoSintomas = tipoSintomaDao.listByDescricao((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), tipoSintomaPesq.getDescricao());
			
		}
		
		tipoSintomaModel = new TipoSintomaDataModel(listaTipoSintomas);
		
		return tipoSintomaModel;
		
	}

	public void setTipoSintomaModel(TipoSintomaDataModel tipoSintomaModel) {
		this.tipoSintomaModel = tipoSintomaModel;
	}

	public List<TipoSintoma> getListaTipoSintomasis() {
		return listaTipoSintomas;
	}

	public void setListaTipoSintomas(List<TipoSintoma> listaTipoSintomas) {
		this.listaTipoSintomas = listaTipoSintomas;
	}

	public TipoSintoma getNovoTipoSintoma() {
		return novoTipoSintoma;
	}

	public void setNovoTipoSintoma(TipoSintoma novoTipoSintoma) {
		this.novoTipoSintoma = novoTipoSintoma;
	}

	public TipoSintoma getTipoSintomaPesq() {
		return tipoSintomaPesq;
	}

	public void setTipoSintomaPesq(TipoSintoma tipoSintomaPesq) {
		this.tipoSintomaPesq = tipoSintomaPesq;
	}
	
}